package com.devilvan.betrice.opgg.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.devilvan.betrice.opgg.dto.OpggLegendDto;
import com.devilvan.betrice.opgg.po.OpggLegendPo;
import com.devilvan.betrice.opgg.service.OpggLegendService;
import com.devilvan.betrice.opgg.mapper.OpggLegendMapper;
import com.devilvan.betrice.opgg.repository.OpggLegendRepository;
import com.devilvan.betrice.util.UEmpty;
import com.devilvan.betrice.util.UCopy;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author Evad.Wu
 * @Description OPGG-英雄列表信息 业务逻辑类
 * @date 2022-10-04
 */
@Service
public class OpggLegendServiceImpl extends ServiceImpl<OpggLegendMapper, OpggLegendPo> implements OpggLegendService {
    @Resource(name = "opggLegendRepository")
    private OpggLegendRepository opggLegendRepository;

    @Override
    public OpggLegendPo saveUpdate(OpggLegendDto opggLegendDto) {
        OpggLegendPo opggLegendPo = new OpggLegendPo();
        UCopy.fullCopy(opggLegendDto, opggLegendPo);
        return opggLegendRepository.saveAndFlush(opggLegendPo);
    }

    @Override
    public List<OpggLegendPo> saveUpdateBatch(List<OpggLegendDto> list) {
        List<OpggLegendPo> opggLegendPoList = UCopy.fullCopyCollections(list, OpggLegendPo.class);
        return opggLegendRepository.saveAllAndFlush(opggLegendPoList);
    }

    @Override
    public List<OpggLegendPo> checkSaveBatch(List<OpggLegendDto> opggLegendDtoList) {
        List<Long> dtoChampionIdList = opggLegendDtoList.stream().map(OpggLegendDto::getChampionId).toList();
        LambdaQueryWrapper<OpggLegendPo> queryWrapper = new QueryWrapper<OpggLegendPo>().lambda();
        queryWrapper.notIn(OpggLegendPo::getChampionId, dtoChampionIdList);
        List<OpggLegendPo> legendPoList = this.list(queryWrapper);
        List<OpggLegendPo> opggLegendPoList = UCopy.fullCopyCollections(opggLegendDtoList, OpggLegendPo.class);
        List<OpggLegendPo> disjunctionList = UCopy.checkAssemble(opggLegendPoList, legendPoList, OpggLegendPo::getChampionId);
        if (UEmpty.isNotEmpty(disjunctionList)) {
            opggLegendRepository.saveAllAndFlush(disjunctionList);
        }
        return disjunctionList;
    }
}
